package study.getage;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;

import java.util.Date;

/**
 * @author huan
 */
public class GetAge {
    /**
     * 周岁
     *
     * @param birthday 生日
     * @return int周岁数值
     */
    public int fullAge(String birthday) {
        return DateUtil.ageOfNow(birthday);
    }

    /**
     * 虚岁
     *
     * @param birthday 生日
     * @return int虚岁数值
     */
    public int shamAge(String birthday) {
        Date date = formatBirthday(birthday);
        int birYear = DateUtil.year(date);
        String today = DateUtil.today();
        int year = Integer.parseInt(today.split("-")[0]);
        return year - birYear + 1;
    }

    /**
     * 距离现在的天数
     *
     * @param birthday 生日
     * @return 距离现在的天数 long
     */
    public long gapDay(String birthday) {
        Date date = formatBirthday(birthday);
        return DateUtil.between(date, formatToday(), DateUnit.DAY);
    }

    /**
     * 距离现在的月数
     *
     * @param birthday 生日
     * @return 距离现在的月数 long
     */
    public long gapMonth(String birthday) {
        Date date = formatBirthday(birthday);
        return (long) Math.ceil(DateUtil.between(date, formatToday(), DateUnit.DAY) * 1.0 / 30);
    }

    /**
     * 已经活的分钟数
     *
     * @param birthday 生日
     * @return 已经活的分钟数 long
     */
    public long gapMin(String birthday) {
        Date date = formatBirthday(birthday);
        return DateUtil.between(date, formatToday(), DateUnit.MINUTE);
    }

    /**
     * 距离活到目标年龄还有多少天
     *
     * @param birthday 生日
     * @param target   目标岁数
     * @return 距离活到目标年龄还有多少天
     */
    public long getTime(String birthday, String target) {
        Date date = formatBirthday(birthday);
        Date newDate = DateUtil.offset(date, DateField.YEAR, Integer.parseInt(target));
        long totalDay = DateUtil.between(newDate, formatToday(), DateUnit.DAY);
        if (totalDay < 0) {
            System.out.println("你已经超过这个目标了奥，来个更大的目标吧");
        }
        return totalDay;
    }

    /**
     * 距离活到目标年龄还有多少分钟
     *
     * @param birthday 生日
     * @param target   目标岁数
     * @return 距离活到目标年龄还有多少分钟
     */
    public long getMin(String birthday, String target) {
        Date date = formatBirthday(birthday);
        Date newDate = DateUtil.offset(date, DateField.YEAR, Integer.parseInt(target));
        long totalMin = DateUtil.between(newDate, formatToday(), DateUnit.MINUTE);
        if (totalMin < 0) {
            System.out.println("你已经超过这个目标了奥，来个更大的目标吧");
        }
        return totalMin;
    }

    /**
     * 星座
     * 尚有问题
     *
     * @param birthday 生日
     * @return 星座
     */
    public String zodiac(String birthday) {
        String[] bir = birthday.split("-");
        return DateUtil.getZodiac(Integer.parseInt(bir[1]), Integer.parseInt(bir[2]));
    }

    /**
     * 生肖
     *
     * @param birthday 生日
     * @return 生肖
     */
    public String chineseZodiac(String birthday) {
        String[] bir = birthday.split("-");
        return DateUtil.getChineseZodiac(Integer.parseInt(bir[0]));
    }

    /**
     * 格式化输入的日期
     *
     * @param birthday 输入的生日
     * @return 格式化
     */
    private Date formatBirthday(String birthday) {
        return DateUtil.parse(birthday, "yyyy-MM-dd");
    }

    /**
     * 格式化今天日期
     *
     * @return 格式化今天日期
     */
    private Date formatToday() {
        return DateUtil.parse(DateUtil.today(), "yyyy-MM-dd");
    }
}
